except Exception, ex:
raise XendError(str(ex))
+ def domain_dump(self, domid, filename, live, crash):
+ """Dump domain core."""
+
+ dominfo = self.domain_lookup_by_name_or_id_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+
+ if dominfo.getDomid() == PRIV_DOMAIN:
+ raise XendError("Cannot dump core for privileged domain %s" % domid)
+
+ try:
+ log.info("Domain core dump requested for domain %s (%d) live=%d crash=%d.",
+ dominfo.getName(), dominfo.getDomid(), live, crash)
+ return dominfo.dumpCore(filename)
+ except Exception, ex:
+ raise XendError(str(ex))
def domain_destroy(self, domid):
"""Terminate domain immediately."""
self.restart(True)
- def dumpCore(self):
+ def dumpCore(self,corefile=None):
"""Create a core dump for this domain. Nothrow guarantee."""
try:
- corefile = "/var/xen/dump/%s.%s.core" % (self.info['name'],
+ if not corefile:
+ corefile = "/var/xen/dump/%s.%s.core" % (self.info['name'],
self.domid)
xc.domain_dumpcore(self.domid, corefile)
create_help = """create [-c] <ConfigFile>
[Name=Value].. Create a domain based on Config File"""
destroy_help = "destroy <DomId> Terminate a domain immediately"
+dump_core_help = """dump-core [-L|--live][-C|--crash]
+ <DomId> [FileName] Dump core of the specified domain"""
+
help_help = "help Display this message"
list_help = "list [--long] [DomId, ...] List information about domains"
list_label_help = "list [--label] [DomId, ...] List information about domains including their labels"
"console",
"create",
"destroy",
+ "dump-core",
"help",
"list",
"mem-set",
"destroy",
"domid",
"domname",
+ "dump-core",
"list",
"list_label",
"mem-max",
server.xend.domain.unpause(dom)
+def xm_dump_core(args):
+ arg_check(args, "dump-core",1,3)
+ live = False
+ crash = False
+ import getopt
+ (options, params) = getopt.gnu_getopt(args, 'LC', ['live','crash'])
+
+ for (k, v) in options:
+ if k in ['-L', '--live']:
+ live = True
+ if k in ['-C', '--crash']:
+ crash = True
+
+ if len(params) == 0 or len(params) > 2:
+ err("invalid number of parameters")
+ usage("dump-core")
+
+ dom = params[0]
+ if len(params) == 2:
+ filename = os.path.abspath(params[1])
+ else:
+ filename = None
+
+ if not live:
+ server.xend.domain.pause(dom)
+
+ try:
+ print "dumping core of domain:%s ..." % str(dom)
+ server.xend.domain.dump(dom, filename, live, crash)
+ finally:
+ if not live:
+ server.xend.domain.unpause(dom)
+
+ if crash:
+ print "destroying domain:%s ..." % str(dom)
+ server.xend.domain.destroy(dom)
+
def xm_rename(args):
arg_check(args, "rename", 2)
"destroy": xm_destroy,
"domid": xm_domid,
"domname": xm_domname,
+ "dump-core": xm_dump_core,
"rename": xm_rename,
"restore": xm_restore,
"save": xm_save,